/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package vooejb;


import javax.ejb.Stateless;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import reservavoo.*;
/**
 *
 * @author Ricardo Luíz
 */
@Stateless(mappedName = "BeanGol")  
public class SessionFacadeVooBean implements SessionFacadeGolLocal, SessionFacadeGolRemote {
     @PersistenceContext
 EntityManager em;
     
     public<T> void incluir(T o) {
 em.persist(o);
 }

 public<T> T alterar(T o) {
 o = em.merge(o);
 return o;
 }

 public<T> void apagar(T o) {
 o = em.merge(o);
 em.remove(o);}
 
  public List<Aeroporto> aeroportos() {
 List<Aeroporto> lista =em.createQuery("SELECT a FROM Aeroporto a ORDER BY a.nome").getResultList();
return lista;
 }

 public List<Passageiro> passageiros() {
 List<Passageiro> lista = em.createQuery("SELECT p FROM Passageiro p").getResultList();
return lista;
 }

 public List<Voo> voos() {
 List<Voo> lista = em.createQuery("SELECT v FROM Voo v").getResultList();
return lista;
 }   
 
 public List<Voo> voos(Date dia, Long origem, Long destino) {
 List<Voo> lista = em.createQuery(
 "SELECT v FROM Voo v WHERE" +
 " v.dia = :dia AND" +
 " v.origem.id = :origem AND" +
 " v.destino.id = :destino" +
 " ORDER BY v.dia, v.hora")
 .setParameter("dia", dia)
 .setParameter("origem", origem)
 .setParameter("destino", destino)
.setHint("toplink.refresh", "true")
 .getResultList();
return lista;
 }
 
 public List<VooSelecionado> voosSelecionados(Date dia, Long origem, Long destino) {
 boolean s = true;
 List<VooSelecionado> voos =new ArrayList<VooSelecionado>();
for(Voo v : voos(dia, origem, destino)) {
 VooSelecionado vooSelecionado =new VooSelecionado();
 vooSelecionado.setVoo(v);
 vooSelecionado.setSelecionado(s);
 s =false;
 voos.add(vooSelecionado);
 }
return voos;
 }
 
  public Passageiro localizarPassageiro(String email, String senha) {
 Passageiro p =null;
try{
 p = (Passageiro) em.createQuery("SELECT p FROM Passageiro p " +
 " WHERE p.email = :email AND " +
 " p.senha = :senha")
 .setParameter("email", email)
 .setParameter("senha", senha)
 .getSingleResult();
 }catch(Exception e) {
 e.printStackTrace();
 }
return p;
 }

  public void vincular(Voo voo, Reserva reserva) {
 voo = em.merge(voo);
 reserva.setVoo(voo);
 em.persist(reserva);
 voo.getReservas().add(reserva);
 }
    // Add business logic below. (Right-click in editor and choose
    // "Insert Code > Add Business Method")
    private List<String> voosHoje() {
 List<Voo> voos = em.createQuery(
 "SELECT v FROM Voo v WHERE" +
 " v.dia = :dia " +
 " ORDER BY v.origem.nome, v.destino.nome, v.hora")
 .setParameter("dia",new Date())
 .setHint("toplink.refresh", "true")
 .getResultList();
 List<String> lista =new ArrayList<String>();
for(Voo voo : voos) {
 lista.add(voo.toString());
 }
return lista;
 }

 public List<String> voosHojeLocal() {
return voosHoje();
 }

 public List<String> voosHojeRemoto() {
return voosHoje();
 }
    
}
